/*!
 * @author  Vladimir Kerimov
 * @file    io.h
 * @version 1.0
 * @brief   Input/output operators
 * @date    2013
 */

/*
 *    ______   __
 *   /  ___/  /__/   __  ___      _____        _____     __    __     _____        __  ___      _____     __  ___
 *  |  |___    __   /  |/   \    / __  \      /  _  \   |  |  |  |   /  _  \      |  |/   \    /  _  \   |  |/   \
 *   \___  \  /  |  |   __   |  | /  __/     |  / \  |  |  |  |  |  |  / \  |     |   __   |  |  / \  |  |   __   |
 *  ____/  /  |  |  |  /  \  |  |   /___     |  \_/  |  |   \_|  |  |  \_/  |     |  /  \  |  |  \_/  |  |  /  \  |
 * /______/   |__/  |__|  |__/   \_____/      \___   |   \___/|__|   \___/|_|     |__|  |__|   \_____/   |__|  |__|
 *                                                |  |
 *                                                |__/
 *
 */

#pragma once

#include <qua/api.h>
#include <iosfwd>

namespace qua
{
    class fixed;
    class text;
    class time;

    QUAZAR_API std::ostream&  operator << ( std::ostream& output,  fixed const& value );
    QUAZAR_API std::wostream& operator << ( std::wostream& output, fixed const& value );

    QUAZAR_API std::istream&  operator >> ( std::istream& input,   fixed& value );
    QUAZAR_API std::wistream& operator >> ( std::wistream& input,  fixed& value );

    QUAZAR_API std::ostream&  operator << ( std::ostream& output,  text const& value );
    QUAZAR_API std::wostream& operator << ( std::wostream& output, text const& value );

    QUAZAR_API std::istream&  operator >> ( std::istream& input,   text& value );
    QUAZAR_API std::wistream& operator >> ( std::wistream& input,  text& value );

    QUAZAR_API std::ostream&  operator << ( std::ostream& output,  time const& value );
    QUAZAR_API std::wostream& operator << ( std::wostream& output, time const& value );

    QUAZAR_API std::istream&  operator >> ( std::istream& input,   time& value );
    QUAZAR_API std::wistream& operator >> ( std::wistream& input,  time& value );
}
